package com.journeyinguangyuan.controller;

import com.journeyinguangyuan.entity.Message;
import com.journeyinguangyuan.result.CommonResult;
import com.journeyinguangyuan.result.ResultUtil;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @description:
 * @author: ziger
 * @time: 2023/9/25 14:26
 */

@RestController
public class TestController {

    /**
     * 浏览器访问链接时，向浏览器发送信息
     *
     * 方便前端解析，返回类型使用CommonResult<T>;其中泛型T可以放任何对象
     * 泛型也可以不指定，像后三个方法一样
     * @return
     */
    @GetMapping("/test0")
    public CommonResult<String> test0(){
        return ResultUtil.success("success");
    }

    /**
     * 仅返回字符串
     * 不推荐
     * @return
     */
    @GetMapping("/test1")
    public String test1(){
        return "success";
    }

    /**
     * CommonResult中可以放入任何实例对象，自动解析为json
     * CommonResult<T> List<U> String
     * @return
     */
    @GetMapping("/test2")
    public CommonResult<List<String>> test2(){
        List<String> re = new ArrayList<>();
        re.add("www.baidu.com");
        re.add("www.google.com");

//        也可以自己创建CommonResult类,但是不如直接调用Util方便
//        CommonResult<List<String>> result = new CommonResult<>(true,re);
//        return result;

        return ResultUtil.success(re);
    }

    /**
     * 向浏览器获取参数，如果某些操作需要向浏览器获取参数，可以使用 @PathVariable注解
     * @param msg
     * @return
     */
    @GetMapping("get-msg/{msg}")
    public CommonResult getMsg(@PathVariable String msg){

        return ResultUtil.success(msg);
    }

    /**
     * 浏览器向服务器提交信息一般使用POST模式，GET模式一般用于查询/浏览器向服务器索取信息
     * POST模式下直接将所需的参数放在形式参数中，必须是封装类而非基本数据类型
     * @param message
     * @return
     */
    @PostMapping(value = "/leave-message")
    public CommonResult leaveMsg(Message message){
        return ResultUtil.success(message);
    }

    /**
     * 使用注解和上述方法一致，可以在既有路径变量又有请求体变量的情况下加以区分
     * @param message
     * @return
     */
    @PostMapping(value = "/leave2")
    public CommonResult leaveMsg2(@RequestBody Message message){
        return ResultUtil.success(message);
    }

    /**
     * 返回图片
     */
    @GetMapping("/get-img")
    public CommonResult getImg(){
        List<String> re = new ArrayList<>();
        re.add("01.ico");
        re.add("02.ico");
        return ResultUtil.success(re);
    }

    /**
     * 其他传参方法自行百度
     * SpringBoot Controller 接收参数/返回参数
     */
}
